编辑超高规则文件
编辑现有超高规则文件。使用此工具打开规则文件时,将根据架构验证该文件。
您可以通过以下方式访问此工具:
超高规则文件
超高计算器使用 XML 格式规则文件计算超高的各个方面。此文件用于计算路线中每条曲线的 Max E 比率以及将路基从标准路拱段横坡旋转到全超高横坡 (Max E) 所需的过渡段长度。
下面几节将介绍:
如何在计算超高期间应用超高规则文件
Max E 比率由比率表或比率公式这两种可能的方法之一来计算。
如果使用比率表,则通过查看规则文件中存在哪些比率表来填充设计速度。
如果用户选择比率公式,则使用该公式下的速度集合中存在的速度元素填充设计速度。速度不必是简单的数值。例如,可以使用60 Urban、Loop Ramp或All Speeds速度定义规则文件。当比率公式从另一个源(如用户变量)确定实际速度时,字母数字速度名称可能很有用。
过渡段计算也由过渡段表或过渡段公式这两种可能的方法之一来执行。
如果使用定义过渡段长度的表,则必须为每个可能的速度(数字或字母数字)定义一个过渡段表。过渡段公式不一定使用速度作为变量。
如果用户要使用速度表执行过渡段计算,则必须为每个可能的速度定义一个过渡段表。过渡段公式不一定使用速度作为变量。
选择 Max E 比率和过渡段之后,规则文件中定义的任何运行时用户变量将显示在弹出对话框中,允许用户更改任何/所有这些值。
代码将计算每条曲线的超高关键点(正常路拱、零度路拱、反向路拱和全超高)的 Max E 比率、过渡段长度和桩号位置。
接下来,代码检查规则文件是否具有任何自定义关键桩号定义。如果是,则处理这些定义。自定义关键桩号可以替换任何标准超高关键点或添加其他自定义关键桩号,例如,在 1% 横坡处。
调整任何关键桩号之后,代码将查看反向曲线或背对背曲线之间的过渡重叠。如果任何超高定义重叠或小于定义的最小间距,则根据过渡重叠调整选项的定义对计算的桩号进行额外调整。
最后,将超高值从外侧车道复制到其他车道。
重要注意事项:通过选择 SuperelevationCalculation.xsl 报告样式表,您可以获得一份详细的超高报表。
编辑超高规则文件命令的工作方式
编辑超高规则文件命令用于编辑 XML 规则文件。尽管 XML 文件可以直接编辑,但建议通过此界面进行所有编辑,以确保 XML 数据的格式正确。当打开现有规则文件时,编辑器还将根据适当的 XML 架构和等式语法验证规则文件。
创建/编辑超高规则文件对话框将打开一个几乎完全空白的定义(尚未保存到 XML 文件)。当前 XML 文件的名称显示在对话框标题中。在保存文件之前,这将报告为 Untitled.xml。我们之所以说几乎完全空白是因为缺省对话框预装有 AASHTO 方法 5 比率公式和 AASHTO 相对梯度过渡段长度公式。您可以选择保留并使用这些公式或将其删除。
该对话框有七个部分。下面将讨论每个部分及其设置。
- 常规
长度 - 描述用户正在使用的单位。</p>
桩号舍入 - 值 0 定义无舍入。如果存在非零值,则计算的所有桩号值将取整为此值。例如,如果值为 0.2,则桩号 10+23.48 将取整为 10+23.4。
水平坡度取整 - 值 0 定义无舍入。如果存在非零值,则所有横坡值将取整为此值。例如,值 0.01 将横坡 2.3456% 取整为 2.35%。
按廊道设置创建 - 这些是可选设置,定义通过选择廊道使用创建超高区间工具创建超高时所用的缺省方法。系统将自动使用这些缺省方法,并且在使用此工作流时不会提示用户进行任何选择。
- 表
此部分中显示比率和过渡段查找表。这些表通常是从现有 SUP 或 SEP 文件导入。如果需要,还可以通过界面创建和编辑这些表。
比率表定义不同曲线半径的最大横坡。单个比率表可以有多个基于不同设计速度的半径/横坡查找表。
过渡段表定义不同最大横坡的过渡段长度。单个过渡段表可以有多个基于不同旋转车道数量的最大 eMax/过渡段长度查找表。
-
公式
公式是确定 eMax 和过渡段长度的替代方法,功能比查找表更强大。几乎可以使用常量值、查找表、软件变量以及用户可在运行时定义的变量编写任何公式来计算这些值。这样便可极为灵活地计算 eMax 和过渡段长度。
公式以双精度格式计算并返回曲线的最大横坡(例如,返回 0.03,表示 3%)或过渡段长度(例如,127.92)。
缺省情况下,包括 AASHTO 方法 5 比率公式和 AASHTO 相对梯度过渡段长度公式作为
示例。
有关编写公式的信息,请参阅<xref>在规则文件中编写公式</xref>主题。
-
偏转和过渡选项
以下设置控制如何计算 eMax 和过渡段的值。它们通常在规则文件中设置为标准,但如果需要在运行时更改这些值中的一个或多个,也可以通过用户变量将其公开给用户。
- 偏转选项、固定长度 - 禁用后,使用与径流剖面相同的坡度计算偏转长度。启用后,可以指定固定长度的偏转长度。如果需要更复杂的选项来计算偏转,则使用自定义关键桩号。
- 过渡段类型 - 定义横坡如何过渡以实现全超高横坡。以下类型描述了在超高图上绘制的超高车道外侧点的路径。
线性 - 顶点处无过渡,所有线段都是直的。
抛物线 - 在每个顶点处创建一个抛物线过渡段。抛物线的长度由非线性曲线长度参数和最短相邻线段中的较小值确定。
反向抛物线 - 拟合普通路拱点和全超高点之间的反向抛物线(整个过渡段)。
反向四次曲线 - 与反向抛物线相同,但公式不同。
反向三次曲线 - 与反向抛物线相同,但公式不同。
反向非对称抛物线 1 - 与反向抛物线相同,但凹抛物线的长度为 45,凸抛物线的长度为 55。可以使用配置变量 CIVIL_SUPER_REVERSE_PARABOLIC_NONSYMMETRICAL_1_SAG 和 CIVIL_SUPER_REVERSE_PARABOLIC_NONSYMMETRICAL_1_CREST 定义备选抛物线长度。
反向非对称抛物线 2 - 与反向抛物线相同,但凹抛物线的长度为 30,凸抛物线的长度为 40。可以使用配置变量 CIVIL_SUPER_REVERSE_PARABOLIC_NONSYMMETRICAL_2_SAG 和 CIVIL_SUPER_REVERSE_PARABOLIC_NONSYMMETRICAL_2_CREST 定义备选抛物线长度。
反向对称抛物线 - 此对称选项利用不相切的抛物线过渡段,每条抛物线的长度是过渡段长度的一半。
- 非线性曲线长度 - 定义抛物线过渡段的最大长度。
- 相切百分比 - 不在曲线上的过渡段长度的百分比。
- 使用缓和曲线长度 - 如果启用且缓和曲线存在,则缓和曲线长度将用作过渡段长度,而不是计算得出的过渡段长度。在这种情况下,相切百分比值将被忽略。如果禁用,将使用计算得出的过渡段长度。
- 开始将内侧车道与外侧车道一起旋转 - 如果启用,则内侧车道将在外侧车道的旋转起始位置开始旋转(最早开始时间)。如果禁用,则内侧车道在外侧车道达到反向路拱的位置开始旋转。换而言之,内侧车道和外侧车道较平或具有相同的横坡。
- 长度为过渡段总长 - 如果启用,则过渡段长度为从普通路拱到全超高(径流长度 + 偏转长度)。如果禁用,则过渡段长度为从水平或零度路拱到全超高(偏转长度)。
- 内插表 - 如果启用,则将内插所有 e 比率和过渡段表。否则,e 比率和过渡段长度将是更高的值。
- 曲线重叠调整
以下选项定义当一条曲线的出口过渡段与下一条曲线的入口过渡段重叠时如何调整超高桩号。
如果为某种曲线类型(反向曲线或曲线-曲线)定义了多个选项(滑动、缩短等),将使用最小的最小超高过渡间隙大于实际间隙的选项。例如,如果实际间隙为 0,一个选项的最小超高过渡间隙为 50,另一个选项的最小超高过渡间隙为 100,将使用最小超高过渡间隙为 50 的选项。
- 曲线类型 - 与在对话框的其余部分中定义的调整相关的曲线类型。有两组调整;一组用于反向曲线,一组用于曲线-曲线。
- 最小超高过渡间隙 - 普通路拱桩号之间的任何实际间隙小于此数字将导致调用此选项(上述存在多个选项的情况除外)。
- 滑动 - 每条曲线的整个过渡段将进一步移入每条曲线,直至达到最小超高过渡间隙。过渡段长度保持不变。
- 缩短 - 保留全超高点并缩短过渡段,直至达到最小超高过渡间隙。缩短的幅度与过渡段长度成比例。
- 反向路拱 -(仅限曲线-曲线调整选项)- 道路将从平面向下过渡到反向路拱,然后回到全超高。消除零度路拱和普通路拱桩号。
- 平面 - 道路将从全超高平面过渡全超高。消除零度路拱和普通路拱桩号。
- 可以定义自定义公式来计算曲线之间的过渡。有关编写公式的信息,请参阅下面的在规则文件中编写公式。
- 自定义关键桩号
自定义关键桩号可以替代为超高计算的标准过渡桩号,或者是要添加到车道的其他桩号。
通过将相应变量类型的公式设置为 FALSE,可以清除或排空现有超高关键桩号。
- 创建自定义关键桩号公式 - 启用后,可以定义自定义关键桩号。
- 描述 - 描述这些自定义关键桩号的用途。
- 条件 - 计算结果必须为 True 才会计算自定义关键桩号的逻辑表达式。空值的计算结果为 True。
- 桩号 - 现有自定义关键桩号的列表。
- 变量 - 打开公式编辑器,用于定义新变量和公式。请参阅在规则文件中编写公式主题。
- 新建 - 定义新的自定义关键桩号。
公式 - 定义新的自定义关键桩号位置的公式。此公式可以使用全局(内置)变量和局部变量,这些变量通过在公式编辑器中定义的公式得出。例如,可以使用自定义公式计算从全超高到反向路拱的新过渡段长度。假设结果存储在名为 ReverseCrownLength 的变量中。那么定义零度横坡关键桩号的公式就是 FullSuperStation - ReverseCrownLength。FullSuperStation 是软件定义的全局变量。请参阅下面的在规则文件中编写公式。
类型 - 定义所定义的关键桩号的类型。如果关键桩号类型是标准类型(普通路拱、零度横坡、反向路拱或全超高)之一,则替换标准关键桩号。如果类型是自定义,则向车道添加一个新的关键桩号。
- 运行时变量
运行时变量是用户可在运行时设置其值的变量。因为这些变量允许代理锁定规则文件,使其无法编辑,但仍然为用户提供有限的访问权限,以便在创建超高期间更改值或控制计算。
运行时变量可以替代偏转或过渡选项,或者定义可用于其他公式的新值。
- 名称 - 新变量的名称。
- 描述 - 新变量的描述。
- 替代 - 定义如何使用变量。无是一个自定义变量,定义后可用于 eMax 和过渡段长度公式。其他选项用于替代偏转或过渡设置。其中包括内插表、切线曲线缓和百分比、使用缓和曲线长度、长度为过渡段总长、过渡段类型、非线性曲线长度、开始将内侧车道与外侧车道一起旋转、偏转是固定的长度和偏转长度。
- 类型 - 定义自定义变量的类型。
字符串 - 在运行时作为自由格式输入的键入命令字段或用于从预置列表中选择的组合框呈现给用户。
整型 - 在运行时作为自由格式输入的键入命令字段或用于从预置列表中选择的组合框呈现给用户。可以定义最小值和最大值范围。
十进制 - 在运行时作为键入命令字段呈现给用户(将验证输入)。可以定义最小值和最大值范围。
布尔 - 在运行时作为复选框呈现给用户。
缺省值 - 变量的缺省(起始)值。
- 导入 SUP/SEP 文件
导入 SUP和导入 SEP工具有助于设置 XML 规则文件。导入过程不会从原有文件导入并定义所有设置,但会导入大部分表。
导入 SUP将引入现有比率表和过渡段长度表。其余的设置需要手动配置。
导入 SEP将引入现有比率表、过渡段长度表和相对梯度表。它不导入比率公式或过渡段长度公式。其余的设置需要手动配置。
- 在规则文件中编写公式
公式在公式编辑器中开发。
- 名称 - 比率公式或过渡段长度公式的名称。在计算超高时,此名称将显示在界面中供用户选择。
- 公式 - 定义将返回的最终值。如果这是比率公式或过渡段长度公式,则该值将是 eMax 比率或过渡段长度。如果此公式用于曲线重叠调整或自定义关键桩号,则最终值可以是用于其他公式的任何变量,定义这些相应的值。建议将此公式值设置为单个变量,该变量在对话框的公式变量部分中计算(如下所示),包括 TransitionLength 变量。
- 显示变量和运算符 - 展开对话框以显示可用的运算符和变量。全局、局部(公式)和运行时(用户)变量如图所示。下面将更详细地定义这些变量。
- 公式变量 - 对话框的这一部分定义最终用于计算此公式的最终值的变量。
公式变量用于生成公式中使用的中间值。这些变量用于规则文件中的公式,用户不能在运行时更改它们。
变量可以由公式或表定义,但不能同时由两者定义。如果变量由公式定义,则在公式字段中编写公式。在示例中,变量 TransitionLength 由公式 100*(WidthLane*NRotatedLanes)*MaxE*bw/gradient 定义。在此示例中,WidthLane、NRotatedLanes 和 MaxE 是软件提供的全局变量。gradient 和 bw 是此对话框中定义的局部变量。gradient 变量从表中读取(请注意空白公式)。选择创建/编辑按钮以打开表。
表有两列用于输入和输出值。输出值是变量(本例中为 gradient)的值。输入列表示的内容由输入变量名称设置定义。在此示例中,使用全局变量 Speed。因此,对于每条曲线,在输入列中找到 Speed,并返回相应的梯度。
如果输入变量是数字,则根据内插类型(useLowerBound、linearInterpolation、useUpperBound)内插输出值。否则,输入变量值必须与表的某个输入值精确匹配。
编写公式时,可用的变量类型如下。
- 全局变量 - 由系统定义或在处理过程中计算。根据所计算的公式类型(如下表中所示),可以使用不同的全局变量。
- 局部(公式)变量 - 在规则文件中定义。这些变量用于规则文件中的公式,用户不能在运行时更改它们。
- 运行时(用户)变量 - 在规则文件中定义。用户可在运行时更改这些变量。
下面列出了全局变量:
最大 e-比率
过渡段长度
自定义关键桩号
过渡查询选项
全局变量
X X Radius - 曲线的半径 X X Speed - 设计速度 X X X InitialCrossSlope - 普通路拱横坡 X X NRotatedLanes - 从枢轴旋转的车道数量 X X PivotType - 0 - 路拱,1 - 内侧,2 - 外侧,3 - 左侧,4 - 右侧,5 - 内部分割 X X WidthLane - 平均车道宽度 X MaxE X TransitionLength - 计算得出的过渡段长度值 X SpiralExists - 如果存在缓和曲线则为 true,否则为 false X StartOfSpiral - 缓和曲线起点桩号 X SpiralLength - 缓和曲线长度 X StartOfArc - 弧(曲线)起点桩号 X NCRadius - E 比率计算为普通路拱坡度的半径(最大半径) X RunoutStation - 计算得出的过渡段起点 X RunoffStation - 计算得出的零度横坡位置 X ReverseCrownStation - 计算得出的反向路拱桩号 X FullSuperStation - 计算得出的全超高位置 X OutLength - 第一条曲线出口的过渡段长度 X OutFullSuper - 第一条曲线的全超高桩号 X OutRunoffStation - 第一条曲线的零度横坡位置 X OutRunoutStation - 第一条曲线的普通路拱位置 X InLength - 第二条曲线入口的过渡段长度 X InRunoutStation - 第二条曲线的普通路拱位置 X InRunoffStation - 第二条曲线的零度横坡位置 X InFullSuperStation - 第二条曲线的全超高桩号 X Curve1StartOfArc X Curve1EndOfArc X Curve1EndOfSpiral -False值表示无缓和曲线 X Curve1FullSuperStation X Curve1ReverseCrownStation X Curve1ZeroCrossSlopeStation X Curve1NormalCrownStation X Curve1MaxE X Curve2StartOfArc X Curve2EndOfArc X Curve2StartOfSpiral -False值表示无缓和曲线 X Curve2FullSuperStation X Curve2ReverseCrownStation X Curve2ZeroCrossSlopeStation X Curve2NormalCrownStation X Curve2MaxE 编写公式时,可以使用各种数学函数、运算符和逻辑表达式。
- 数学运算符:+、-、/、*、^ - 指数运算符、%
- 数学函数:ABS、ACOS、ASIN、ATAN、CEILING、COS、COSH、FLOOR、LOOKUP、LOG、LOG10、MAX、MIN、MOD、ROUND、SIGN、SIN、SINH、SQRT、TAN、TANH、TRUNCATE。
- 逻辑运算符:IF、AND、OR、NOT。
- 条件运算符:<、<=、=、==、>=、>、<>。
直接在 XML 文件中工作时要注意,因为<和>是特殊字符,在原始 xml 中必须写成<和>。通过对话框编写公式时,它将为您进行转换。
- 值: FALSE、INFINITY、PI、TRUE。
- 逻辑表达式:IF(逻辑表达式)? execute if true : execute if false 例如:equation="if(altDel == 0.0 and AltSuper == 0.0) ? Delta : altDel" 还可以嵌套逻辑表达式,使另一个 IF 语句可以位于 true 和/或 false 执行语句内部。
- 公式示例
此部分包含各种演示正确设置格式的公式。
- 此示例显示了一些嵌套的数学表达式。(frictionFactor - hPI) / (5729.58*((1/MinRadius) - (1/rPI)))
- 此示例显示了 IF 语句的简单用法。if(R < MinRadius ? MaxERate : if(R >= NCRadius ? InitialCrossSlope : (EFD - F)))
- 此示例显示了一个更复杂的嵌套 IF 语句,其中用户设置一个名为 LaneWidthIndex 的变量,因为将计算运行时变量以确定要使用哪个过渡段长度查找表。if(LaneWidthIndex == 1) ? LengthAt45mWidth : (if(LaneWidthIndex == 2) ? LengthAt5mWidth : (if(LaneWidthIndex == 3) ? LengthAt55mWidth : (if(LaneWidthIndex == 4) ? LengthAt6mWidth : (if(LaneWidthIndex == 5) ? LengthAt65mWidth : (if(LaneWidthIndex == 6) ? LengthAt7mWidth : (if(LaneWidthIndex == 7) ? LengthAt75mWidth : (if(LaneWidthIndex == 8) ? LengthAt8mWidth : (if(LaneWidthIndex == 9) ? LengthAt85mWidth : (if(LaneWidthIndex == 10) ? LengthAt9mWidth : (if(LaneWidthIndex == 11) ? LengthAt95mWidth : (if(LaneWidthIndex == 12) ? LengthAt10mWidth : (if(LaneWidthIndex == 13) ? LengthAt12mWidth : 0))))))))))))
- 此示例显示了将值取整到最接近的整数。Round 函数有两个参数。第一个参数是要取整的值或变量,第二个参数是要取整到的小数位数(0 = 整数,例如 3, 1 = 十分位数,例如 3.4, 2 = 百分位数,例如 3.47)例如,Round(WidthLane, 0) 将把 WidthLane 变量中的值取整到最接近的整数。